import java.util.ArrayList;
import java.util.Scanner;


public class Principal {
	
	static ArrayList<Edital> editais = new ArrayList<Edital>();
	static Scanner entrada = new Scanner(System.in);
	static ArrayList<Autor> autores = new ArrayList<Autor>();
	static ArrayList<Pessoa> pessoas = new ArrayList<Pessoa>();
	static ArrayList<Projeto> projetos = new ArrayList<Projeto>();
	
	public static void main(String[] args) {
		
		int opcao = -1;
		do {
			opcao = menu();
			switch (opcao) {
				case 1 : cadastrarEdital(); break;
				case 2 : cadastrarPessoa(); break;
				case 3 : cadastrarProjeto(); break;
				case 4 : avaliarProjeto(); break;
				case 5 : cadastrarParticipante(); break;
				case 6 : inativarParticipante(); break;
				case 7 : cadastrarAtividade(); break;
				case 8 : finalizarProjeto(); break;
			}
		} while (opcao != 0);
		
		System.out.println("---- FIM DO PROGRAMA -----");
	}
	
	
	private static int menu() {
		
		System.out.println("---- MENU -----");
		System.out.println("[1] - Cadastrar edital");
		System.out.println("[2] - Cadastrar pessoa");
		System.out.println("[3] - Cadastrar projeto");
		System.out.println("[4] - Avaliar projeto");
		System.out.println("[5] - Cadastrar participante em projeto");
		System.out.println("[6] - Inativar participante em projeto");
		System.out.println("[7] - Cadastrar atividade de projeto");
		System.out.println("[8] - Finalizar projeto");
		System.out.println("[0] - Sair");
		System.out.println("");
		
		System.out.print("Digite uma opcao: ");
		int opcao = entrada.nextInt();
		
		System.out.println("");
		
		return opcao;

	}
	
	
	private static void cadastrarEdital() {
				
		System.out.print("Numero:");
		int numero = entrada.nextInt();
		System.out.print("Ano:");
		int ano = entrada.nextInt();
		System.out.print("Descricao:");
		String descricao = entrada.nextLine();
		descricao = entrada.nextLine();
		System.out.print("Data de Inicio:");
		String strDataInicio = entrada.next();
		System.out.print("Data de Termino:");
		String strDataTermino = entrada.next();
		System.out.print("Data de Publicacao:");
		String strDataPublicacao = entrada.next();
		
		Edital edital = new Edital();
		edital.setNumero(numero);
		edital.setAno(ano);
		edital.setDescricao(descricao);
		edital.setDataInicio(strDataInicio);
		edital.setDataTermino(strDataTermino);
		edital.setDataPublicacao(strDataPublicacao);
		
		editais.add(edital);		
		
	}
	
	
	
	private static void cadastrarProjeto() {
		
		System.out.println("------- Editais Cadastrados ---------");
		for (Edital edital : editais) {
			System.out.println("Numero: "+edital.getNumero());
			System.out.println("Descricao: "+edital.getDescricao());
			System.out.println("----");		
		}
		System.out.print("Escolha o numero do edital: ");
		int numeroEdital = entrada.nextInt();
		Edital editalEncontrado = null;
		for (Edital edital : editais) {
			if (edital.getNumero() == numeroEdital) {
				editalEncontrado = edital;
			} 
		}
		
		if (editalEncontrado == null) {
			System.out.println("Numero de edital nao encontrado");
		} else {
			System.out.print("Codigo: ");
			int codigo = entrada.nextInt();
			System.out.print("Titulo: ");
			String titulo = entrada.nextLine();
			titulo = entrada.nextLine();
			System.out.print("Objetivo: ");
			String objetivo = entrada.nextLine();
			
			Autor autor = escolherAutor();
			if (autor != null) {
				Projeto projeto = new Projeto();
				projeto.setAutor(autor);
				projeto.setEdital(editalEncontrado);
				projeto.setTitulo(titulo);
				projeto.setObjetivo(objetivo);
				projeto.setCodigo(codigo);
				projeto.setParticipantes(new ArrayList<Participante>());
				projeto.setAtividades(new ArrayList<Atividade>());
				projeto.setEncerrado(false);
				projetos.add(projeto);
			}
		}	
		
	}
	
	
	private static Autor escolherAutor() {
		System.out.println("--- Pessoas Cadastradas -----");
		for (Pessoa pessoa : pessoas) {
			System.out.println("CPF: "+pessoa.getCpf());
			System.out.println("Nome: "+pessoa.getNome());
		}
		Pessoa pessoaEncontrada = null;
		System.out.print("Digite o CPF do autor: ");
		String cpf = entrada.next();
		for (Pessoa pessoa : pessoas) {
			if (pessoa.getCpf().equals(cpf)) {
				pessoaEncontrada = pessoa;
			}
		}
		
		Autor autor = null;
		if (pessoaEncontrada == null) {
			System.out.println("CPF nao encontrado no cadastro de pessoas");
		} else {
			autor = new Autor();
			autor.setPessoa(pessoaEncontrada);
		}
		
		return autor;
		
	}
	
	
	private static void avaliarProjeto() {
		
		System.out.println("---------- Projetos Cadastrados -----------------");
		for (Projeto projeto : projetos) {
			if (projeto.getAprovado() == null) {
				System.out.println("Codigo: "+projeto.getCodigo());
				System.out.println("Titulo: "+projeto.getTitulo());
				System.out.println("Autor: "+projeto.getAutor().getPessoa().getNome());
			}
		}
		Projeto projetoEncontrado = null;
		System.out.println("Digite codigo do projeto: ");
		int codigo = entrada.nextInt();
		for (Projeto projeto : projetos) {
			if (projeto.getCodigo() == codigo){
				projetoEncontrado = projeto;
			}
		}
		if (projetoEncontrado == null) {
			System.out.println("Codigo do projeto nao encontrado");
		} else {
			System.out.println("Avaliacao (1-Aprovar / 2-Desaprovar): ");
			int avaliacao = entrada.nextInt();
			if (avaliacao == 1) {
				projetoEncontrado.setAprovado(true);
			} else if (avaliacao == 2) {
				projetoEncontrado.setAprovado(false);
			} else {
				System.out.println("Avaliacao invalida");
			}
		}
	}
	
	
	
	private static void cadastrarParticipante() {
		System.out.println("---------- Projetos Aprovados -----------------");
		for (Projeto projeto : projetos) {
			if ((projeto.getAprovado()!=null)&&(projeto.getAprovado())) {
				System.out.println("Codigo: "+projeto.getCodigo());
				System.out.println("Titulo: "+projeto.getTitulo());
			}
		}
		Projeto projetoEncontrado = null;
		System.out.println("Digite codigo do projeto: ");
		int codigo = entrada.nextInt();
		for (Projeto projeto : projetos) {
			if (projeto.getCodigo() == codigo){
				projetoEncontrado = projeto;
			}
		}
		if (projetoEncontrado == null) {
			System.out.println("Codigo do projeto nao encontrado");
		} else {
			System.out.println("--- Pessoas Cadastradas -----");
			for (Pessoa pessoa : pessoas) {
				System.out.println("CPF: "+pessoa.getCpf());
				System.out.println("Nome: "+pessoa.getNome());
			}
			Pessoa pessoaEncontrada = null;
			System.out.print("Digite o CPF da pessoa: ");
			String cpf = entrada.next();
			for (Pessoa pessoa : pessoas) {
				if (pessoa.getCpf().equals(cpf)) {
					pessoaEncontrada = pessoa;
				}
			}
			if (pessoaEncontrada == null) {
				System.out.println("CPF de pessoa nao cadatrada");
			} else {
				System.out.println("Tipo de participante (0 - Voluntario / 1 - Bolsista)");
				int tipoParticipante = entrada.nextInt();
				if ((tipoParticipante != 1)&&(tipoParticipante != 0)) { 
					System.out.println("Tipo de participante invalido");
				} else {
					double valorBolsa = 0;
					if (tipoParticipante == 1) {
						System.out.println("Valor da Bolsa: ");
						valorBolsa = entrada.nextDouble();					
					} 	
					Participante participante = new Participante();
					participante.setPessoa(pessoaEncontrada);
					participante.setTipo(tipoParticipante);
					participante.setValorBolsa(valorBolsa);
					projetoEncontrado.getParticipantes().add(participante);
					pessoas.remove(pessoaEncontrada);	
				}
			}
		}
	}
	
	
	
	private static void cadastrarAtividade() {
		
		System.out.println("---------- Projetos Aprovados -----------------");
		for (Projeto projeto : projetos) {
			if (projeto.getAprovado()) {
				System.out.println("Codigo: "+projeto.getCodigo());
				System.out.println("Titulo: "+projeto.getTitulo());
			}
		}
		Projeto projetoEncontrado = null;
		System.out.println("Digite codigo do projeto: ");
		int codigo = entrada.nextInt();
		for (Projeto projeto : projetos) {
			if (projeto.getCodigo() == codigo){
				projetoEncontrado = projeto;
			}
		}
		if (projetoEncontrado == null) {
			System.out.println("Codigo do projeto nao encontrado");
		} else {
			System.out.print("Data da atividade: ");
			String dataAtividade = entrada.next();
			System.out.println("Descricao da atividade: ");
			String descricaoAtividade = entrada.nextLine();
			descricaoAtividade = entrada.nextLine();
			Atividade atividade = new Atividade();
			atividade.setData(dataAtividade);
			atividade.setDescricao(descricaoAtividade);
			projetoEncontrado.getAtividades().add(atividade);
		}
	}
	
	
	
	private static void inativarParticipante() {
		System.out.println("------- Participantes em Projetos ------------");
		for (Projeto projeto : projetos) {
			if ((projeto.getAprovado()) && (!projeto.isEncerrado())) {
				for (Participante participante : projeto.getParticipantes()) {
					System.out.println("CPF: "+participante.getPessoa().getCpf());
					System.out.println("Nome: "+participante.getPessoa().getNome());
					System.out.println("Projeto: "+projeto.getTitulo());
				}
			}
		}
		Participante participanteInativado = null;
		Projeto projetoDoParticipanteInativado = null;
		System.out.print("CPF do participante: ");
		String cpf = entrada.next();
		for (Projeto projeto : projetos) {
			for (Participante participante : projeto.getParticipantes()) {
				if (participante.getPessoa().getCpf().equals(cpf)) {
					participanteInativado = participante;
					projetoDoParticipanteInativado = projeto;
				}				
			}
	
		}
		
		if (participanteInativado == null) {
			System.out.println("CPF de participante invalido");
		} else {
			Pessoa pessoa = participanteInativado.getPessoa();
			pessoas.add(pessoa);
			projetoDoParticipanteInativado.getParticipantes().remove(participanteInativado);
		}
		
	}
	
	
	
	private static void finalizarProjeto() {
		System.out.println("---------- Projetos em Execucao -----------------");
		for (Projeto projeto : projetos) {
			if ((projeto.getAprovado()) && (!projeto.isEncerrado())) {
				System.out.println("Codigo: "+projeto.getCodigo());
				System.out.println("Titulo: "+projeto.getTitulo());
			}
		}
		Projeto projetoEncontrado = null;
		System.out.println("Digite codigo do projeto: ");
		int codigo = entrada.nextInt();
		for (Projeto projeto : projetos) {
			if (projeto.getCodigo() == codigo){
				projetoEncontrado = projeto;
			}
		}
		if (projetoEncontrado == null) {
			System.out.println("Codigo do projeto nao encontrado");
		} else {
			System.out.print("Resumo do projeto: ");
			String resumo = entrada.nextLine();
			resumo = entrada.nextLine();
			System.out.print("Resultados alcancados: ");
			String resultado = entrada.nextLine();
			resultado = entrada.nextLine();
			
			projetoEncontrado.setResultados(resultado);
			projetoEncontrado.setResumo(resumo);
			projetoEncontrado.setEncerrado(true);
		}
	}
	
	
	
	
	private static void cadastrarPessoa() {
		
		System.out.print("CPF:");
		String cpf = entrada.next();
		System.out.print("Nome:");
		String nome = entrada.nextLine();
		nome = entrada.nextLine();
		System.out.print("Funcao:");
		String funcao = entrada.nextLine();
		//funcao = entrada.nextLine();
		System.out.print("Email:");
		String email = entrada.next();
		
		
		Pessoa pessoa = new Pessoa();
		pessoa.setNome(nome);
		pessoa.setCpf(cpf);
		pessoa.setFuncao(funcao);
		pessoa.setEmail(email);
		
		pessoas.add(pessoa);			
		
	}
	
}

